package com.own.component.util.excel.util.write.method;

import com.own.component.util.excel.util.write.method.base.BaseMetaData;
import com.own.component.util.excel.util.write.record.ExcelRecord;
import com.own.component.util.excel.util.write.record.SheetRecord;
import lombok.NonNull;

/**
 * BaseSheetMethod sheet的基础操作
 *
 * @author chenxueli
 * @date 2022-06-15 03:14:15
 */
public interface BaseSheetMethod extends BaseMetaData {

    /**
     * 设置活动的工作报表信息
     *
     * @param sheet sheet信息
     * @return excel信息
     */
    default ExcelRecord setSheet(@NonNull SheetRecord sheet) {
        var currentSheet = sheet();
        if (sheet.equals(currentSheet)) {
            return excel();
        }
        // 判断是否已经在当前的sheet表中了
        var sheetList = excel().getSheetList();
        for (var i = 0; i < sheetList.size(); i++) {
            if (sheet.equals(sheetList.get(i))) {
                excel().setSheetIndex(i);
                return excel();
            }
        }
        // 创建新的工作表信息
        return addSheet(sheet);
    }

    /**
     * 添加工作表信息
     *
     * @param sheet sheet信息
     * @return excel信息
     */
    default ExcelRecord addSheet(@NonNull SheetRecord sheet) {
        var excel = excel();
        excel.getSheetList().add(sheet);
        excel.setSheetIndex(excel.getSheetList().size() - 1);
        return excel;
    }

    /**
     * 添加工作簿
     *
     * @param sheetName 工作簿名称
     * @return 当前对象
     */
    default ExcelRecord addSheet(@NonNull String sheetName) {
        // 构造sheet
        var sheet = new SheetRecord(sheetName);
        excel().getSheetList().add(sheet);
        // 设置当前sheet
        return setSheet(sheet);
    }

    /**
     * 改变当前工作簿
     *
     * @param sheetName 工作簿标题
     * @return 表格对象
     */
    default ExcelRecord changeSheet(@NonNull String sheetName) {
        var excel = excel();
        var sheetList = excel.getSheetList();
        for (var i = 0; i < sheetList.size(); i++) {
            if (sheetName.equals(sheetList.get(i).getTitle())) {
                excel.setSheetIndex(i);
                return excel;
            }
        }
        return excel;
    }

    /**
     * 改变当前工作表
     *
     * @param sheetIndex 工作簿索引
     * @return 表格对象
     */
    default ExcelRecord changeSheet(int sheetIndex) {
        var excel = excel();
        if (sheetIndex < 0 || sheetIndex >= excel.getSheetList().size()) {
            sheetIndex = 0;
        }
        excel.setSheetIndex(sheetIndex);
        return excel;
    }

    /**
     * 获取工作表
     *
     * @param sheetName 工作簿标题
     * @return 工作簿对象
     */
    default SheetRecord getSheet(String sheetName) {
        var excel = excel();
        var sheetList = excel.getSheetList();
        for (var sheet : sheetList) {
            if (sheetName.equals(sheet.getTitle())) {
                return sheet;
            }
        }
        return sheet();
    }

    /**
     * 获取工作表
     *
     * @param sheetIndex 工作簿索引
     * @return 工作簿对象
     */
    default SheetRecord getSheet(Integer sheetIndex) {
        var excel = excel();
        if (sheetIndex < 0 || sheetIndex >= excel.getSheetList().size()) {
            return sheet();
        }
        return excel.getSheetList().get(sheetIndex);
    }

}
